package com.glr.subject.service;

import com.glr.common.utils.JsonUtils;
import com.glr.common.utils.RedisOperator;
import com.glr.subject.dao.CourseDao;
import com.glr.subject.entity.Course;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * 学科课程业务层
 *
 * @author GLoRy
 * @date 2021/6/8 22:14
 */
@Service
public class CourseService {

    @Autowired
    private CourseDao courseDao;

    @Autowired
    private RedisOperator redisOperator;

    /**
     * 增加学科课程
     *
     * @param course 学科课程实体
     */
    @Transactional(rollbackFor = Exception.class)
    public void save(Course course) {
        courseDao.save(course);
    }

    /**
     * 修改学科课程
     *
     * @param course 学科课程实体
     */
    @Transactional(rollbackFor = Exception.class)
    public void update(Course course) {
        courseDao.save(course);
    }

    /**
     * 删除学科课程
     *
     * @param id 学科课程id
     */
    @Transactional(rollbackFor = Exception.class)
    public void delete(Integer id) {
        courseDao.deleteById(id);
    }

    /**
     * 根据id查询学科课程
     *
     * @param id 学科课程id
     * @return 学科课程信息
     */
    public Course findById(Integer id) {
        return courseDao.findById(id).orElse(null);
    }

    /**
     * 查询学科课程
     *
     * @return 学科课程信息
     */
    public List<Course> findAll() {
        List<Course> courseList = courseDao.findAll();
        String value = JsonUtils.objectToJson(courseList);
        redisOperator.set("courseList", value);
        return courseList;
    }

    /**
     * 分页查询学科课程
     *
     * @param page     当前页
     * @param pageSize 每页行数
     * @return 学科课程分页信息
     */
    public Page<Course> findByPage(Integer page, Integer pageSize) {
        PageRequest pageRequest = PageRequest.of(page - 1, pageSize);
        Page<Course> courses = courseDao.findAll(pageRequest);
        String value = JsonUtils.objectToJson(courses);
        redisOperator.set("coursePage", value);
        return courses;
    }
}
